package com.example.demo.config;

import com.google.common.util.concurrent.RateLimiter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration  // 声明这是一个Spring配置类
public class RateLimiterConfig implements WebMvcConfigurer {  // 实现WebMvcConfigurer以自定义MVC配置

    /**
     * 创建Guava的RateLimiter限流器Bean
     * 参数100.0表示每秒允许100个请求（QPS=100）
     */
    @Bean
    public RateLimiter rateLimiter() {
        return RateLimiter.create(100.0);  // 使用令牌桶算法控制流量
    }

    /**
     * 创建限流拦截器Bean，并注入RateLimiter
     */
    @Bean
    public RateLimiterInterceptor rateLimiterInterceptor(RateLimiter rateLimiter) {
        return new RateLimiterInterceptor(rateLimiter);  // 拦截器具体逻辑需自行实现
    }

    /**
     * 注册拦截器到Spring MVC
     * addPathPatterns("/**")表示拦截所有请求路径
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(rateLimiterInterceptor(rateLimiter()))
               .addPathPatterns("/**");  // 限流规则应用所有API
    }
}
